package gitlet;

import java.io.File;
import java.io.Serializable;

import static gitlet.Utils.join;
import static gitlet.Utils.readObject;
import static gitlet.Utils.writeObject;

/**
 * 存储文件内容的类
 *
 * @author 王子琪、杨凯伟
 * @date 2023/11/16
 */
public class Blob implements Serializable {
    private final String blobHash; // 存放的blob的SHA1名称，是根据内容content进行计算SHA1的
    private final byte[] content; // 存放的内容

    /**
     * 写入文件内容
     *
     * @param blobHash blob哈希值
     * @param content  文件内容
     * @author 王子琪、杨凯伟
     * @date 2023/11/16
     */
    public Blob(String blobHash, byte[] content) {
        this.blobHash = blobHash;
        this.content = content;
    }

    /**
     * 从类中还原文件内容
     *
     * @param blobsDir blob目录
     * @param blobName blob名称
     * @return {@link String}
     * @author 王子琪、杨凯伟
     * @date 2023/11/16
     */
    public static String getContentFromFile(File blobsDir, String blobName) {
        Blob blob = readObject(join(blobsDir, blobName), Blob.class);
        return blob.getContent();
    }

    /**
     * 从"blobsDir/blobName"路径中读取Blob实例
     *
     * @param blobsDir blob目录
     * @param blobName blob名称
     * @return 从路径中读取到的Blob实例
     * @author 王子琪、杨凯伟
     * @date 2023/11/16
     */
    public static Blob fromFile(File blobsDir, String blobName) {
        return readObject(join(blobsDir, blobName), Blob.class);
    }

    /**
     * 返回文件内容
     *
     * @return {@link String}
     * @author 王子琪、杨凯伟
     * @date 2023/11/16
     */
    public String getContent() {
        return new String(content);
    }

    /**
     * 将本实例写入blobsDir的文件夹中
     *
     * @param blobsDir blob目录
     * @author 王子琪、杨凯伟
     * @date 2023/11/16
     */
    public void saveBlob(File blobsDir) {
        writeObject(join(blobsDir, blobHash), this); // 当前commit写到文件中
    }
}
